#ifndef __INCLUDE_SRC__
#define __INCLUDE_SRC__

#include "ugui.h"
#include "ugui_colors.h"




#define DEF_FORE_COLOR 0x0000
#define DEF_BACK_COLOR 0xffff
extern UG_COLOR fore_color;
extern UG_COLOR back_color;


/// 资源类型枚举
enum is_type_e {
    is_image = 0,
    is_font,
    is_audio,
    is_font_char,
    is_type_max,
    is_unknown = 0xFF // 未知类型
};

/// 图像结构体（单张）
typedef struct tImage {
    const uint16_t* data;  // 图像像素数据
    uint16_t width;        // 宽度（像素）
    uint16_t height;       // 高度（像素）
    uint8_t dataSize;      // 每像素 bit 数（一般为16）
} tImage;

/// 字符结构体（用于字体）
typedef struct tChar {
    uint32_t code;         // 字符编码（可为 UNICODE）
    const tImage* image;   // 对应字符的图像指针
} tChar;

/// 字体结构体（由多个字符图像组成）
typedef struct tFont {
    int length;            // 字符数量
    const tChar* chars;    // 字符数组
} tFont;



#pragma pack(push, 1)
/// 数据头结构体 64
struct src_head_t {
    char     version[32];      // 文件版本/名称，例如 "MQ2_V1_20250815"
    uint16_t resource_count;   // 顶层资源总数
    uint16_t image_count;      // 图像资源数量
    uint16_t font_count;       // 字体资源数量
    uint16_t reserved1;        // 对齐填充/保留
    uint32_t total_size;       // 数据区总大小（字节）
    uint32_t addr_table_addr;  // 地址表起始位置（相对于文件头）
    uint32_t data_area_base_addr;
    uint32_t addr_table_item_count;
    uint32_t reserved[2];      // 预留扩展（CRC、压缩方式等）
};




/// 地址表项结构体 - 扩展版本，包含更多元数据  64 字节
struct src_addr_item_t {
    uint32_t id;            // 全局唯一 ID  
    uint32_t parent_id;     // 父资源 ID (0 表示顶级)
    uint32_t offset;    		// 数据起始地址
    uint32_t size;          // 数据大小
    uint16_t type;          // is_image/is_font/is_audio/is_font_char
    uint32_t char_code;     // 仅当 font_char 时有效（Unicode 编码）
    
    // 图像元数据（当 type == is_image 或 is_font_char 时有效）
    uint16_t width;         // 图像宽度（像素）
    uint16_t height;        // 图像高度（像素）
    uint8_t dataSize;       // 每像素 bit 数（一般为16）
    uint8_t reserved1;      // 保留字段，用于对齐
    
    // 字体元数据（当 type == is_font 时有效）
    uint16_t char_count;    // 字体包含的字符数量
    uint16_t reserved2;     // 保留字段，用于对齐
    
    char     name[32];      // 资源名（减少长度以适应新增字段）
		
};
#pragma pack(pop)    




#define NAME_LOGO_MQ "logo_MQ"
#define NAME_MQ_V3_EN_14 "MQ_V3_EN_B_14"
#define NAME_MQ_V3_EN_16 "MQ_V3_EN_B_16"
#define NAME_MQ_V3_EN_22 "MQ_V3_EN_B_22"
#define NAME_MQ2_EN_B_16 "MQ_EN_B_16"
#define NAME_MQ_V3_EN_GREEN_22 "MQ_V3_EN_B_GREEN_22"
#define NAME_MQ_V3_EN_BLUE_22  "MQ_V3_EN_B_BLUE_22"


extern const struct src_addr_item_t g_addr_table[319];






#endif
